﻿// ===============================================================================
//  Copyright © ymind.net. All rights reserved .
//  官方网站：http://ymind.net/
//  版权所有：彦铭工作室 老陈出品
// ===============================================================================

using System.Data;
using System.Runtime.InteropServices;
using Lcsoft.Data.RDBMS.Results;

namespace Lcsoft.Data.RDBMS
{
	/// <summary>
	/// 表示基本的存储过程访问对象。
	/// </summary>
	[ComVisible(true)]
	public class StoredProcedure : BaseQuery
	{
		/// <summary>
		/// 初始化 <see cref="StoredProcedure"/> 的新实例。
		/// </summary>
		/// <param name="storedProcName">指定存储过程的名称。</param>
		public StoredProcedure(string storedProcName) : this(storedProcName, null) { }

		/// <summary>
		/// 初始化 <see cref="StoredProcedure"/> 的新实例。
		/// </summary>
		/// <param name="storedProcName">指定存储过程的名称。</param>
		/// <param name="connectionConfigName">指定包含数据库连接字符串的配置节的名称。</param>
		public StoredProcedure(string storedProcName, string connectionConfigName) : base(storedProcName, connectionConfigName, true) { }

		/// <summary>
		/// 初始化 <see cref="StoredProcedure"/> 的新实例。
		/// </summary>
		/// <param name="storedProcName">指定存储过程的名称。</param>
		/// <param name="connectionString">用来建立初始连接的连接字符串。该连接字符串的确切内容取决于此连接的特定数据源。默认值为空字符串。</param>
		/// <param name="sqlProvider">提供程序的固定名称。</param>
		public StoredProcedure(string storedProcName, string connectionString, string sqlProvider) : base(storedProcName, connectionString, sqlProvider, true) { }

		/// <summary>
		/// 为查询添加一个 <see cref="OutputParameter"/>。
		/// </summary>
		/// <param name="parameterName"><see cref="OutputParameter"/> 的名称。默认值为空字符串 ("")。</param>
		/// <param name="parameterType"><see cref="System.Data.DbType"/> 值之一。默认值为 <see cref="System.Data.DbType.String"/>。</param>
		internal void AddOutputParameter(string parameterName, DbType parameterType) { this.DbManager.AddOutParameter(parameterName, parameterType); }

		/// <summary>
		/// 为查询添加一个 <see cref="OutputParameter"/>。
		/// </summary>
		/// <param name="parameterName"><see cref="OutputParameter"/> 的名称。默认值为空字符串 ("")。</param>
		/// <param name="parameterValue">一个 <see cref="System.Object"/>，它是该参数的值。默认值为 null。</param>
		internal void AddOutputParameter(string parameterName, object parameterValue) { this.DbManager.AddOutParameter(parameterName, parameterValue); }

		/// <summary>
		/// 为查询添加一个 <see cref="OutputParameter"/>。
		/// </summary>
		/// <param name="parameterName">
		/// <see cref="OutputParameter"/> 的名称。默认值为空字符串 ("")。</param>
		/// <param name="parameterValue">一个 <see cref="System.Object"/>，它是该参数的值。默认值为 null。</param>
		/// <param name="parameterType"><see cref="System.Data.DbType"/> 值之一。默认值为 <see cref="System.Data.DbType.String"/>。</param>
		/// <param name="size">列中数据的最大大小（以字节为单位）。默认值是从参数值推导出的。</param>
		internal void AddOutputParameter(string parameterName, object parameterValue, DbType parameterType, int size) { this.DbManager.AddOutParameter(parameterName, parameterValue, parameterType, size); }

		/// <summary>
		/// 为查询添加一个 <see cref="System.Data.Common.DbParameter"/> 。
		/// </summary>
		/// <param name="parameterName"><see cref="System.Data.Common.DbParameter"/> 的名称。默认值为空字符串 ("")。</param>
		/// <param name="parameterValue">一个 <see cref="System.Object"/>，它是该参数的值。默认值为 null。</param>
		internal void AddParameter(string parameterName, object parameterValue) { this.DbManager.AddParameter(parameterName, parameterValue); }
	}
}
